www.gusucode.com > wxApp PHP版微信小程序CMS系统 v1.0PHP源码程序 > wxApp PHP版微信小程序CMS系统 v1.0/wxAppCMS_v1.0.0/wxAppCMS_v1.0.0/iPHP/core/iQuery.class.php
<?php /** * iPHP - i PHP Framework * Copyright (c) iiiPHP.com. All rights reserved. * * @author iPHPDev <master@iiiphp.com> * @website http://www.iiiphp.com * @license http://www.iiiphp.com/license * @version 2.1.0 */ // i('div')->attr('{ // "id": "id1", // "name": "name", // "class": "class", // "value": "default" // }')->append('asd'); // preg_match_all('@<div(.*?[^<])>(.*?[^<]+)</div>@is', '<div id="id1" name="name" class="class" value="default"><a><asad></div>', $matches); // var_dump($matches); // i('textarea',$attr)->css('height','300px') // $a = i('textarea')->css('height','300px'); // // $a->css(array('width'=>'300px;')); // var_dump((string)$a); // exit(); // $a = i('<textarea style="height:300px;" id="data_xytpuj" name="data[xytpuj]" class="span12"></textarea>') // ->attr(); // var_dump($a); // // $a = i("div")->addClass("clearfloat mt10")->attr; // var_dump($a); // $a->removeClass('mt10'); // $a->removeClass('mt10'); // $a = i('<textarea style="height:300px;" id="data_xytpuj" name="data[xytpuj]" class="span12"></textarea>'); // $a->removeAttr('style'); // var_dump((string)$a); // exit; function i($selector=''){ return new iQuery($selector); } /** * 仿jquery的几个小功能,简单对html操作 */ class iQuery { public $context = null; public $selector = null; protected $preg_value = '(.*?[^"|\'|>|/]*)'; public function __construct($selector) { return $this->tag($selector); } public function tag($selector) { if(strpos($selector,'<')!==false){ preg_match('@<(\w+)\s.*?@is', $selector,$match); if($match[1]){ $this->context = $selector; $this->selector = $match[1]; } return $this; } $this->selector = $selector; switch ($selector) { // case 'select': // case 'button': // case 'textarea': // case 'span': // case 'div': // $this->context = '<'.$selector.' {attr}>{html}</'.$selector.'>'; // break; case 'img': case 'input': $this->context = '<'.$selector.' {attr} />'; break; default: $this->context = '<'.$selector.' {attr}>{html}</'.$selector.'>'; break; } return $this; } public function css_array($p=null) { $style = $this->attr('style'); if($style){ $array = explode(';', $style); foreach ($array as $key => $value) { list($a,$b) = explode(':', $value); $c[$a] = $b; } if($p===null){ return $c; } return $c[$p]; } } /** * css() 方法设置或返回被选元素的一个或多个样式属性。 * @param [type] $property [description] * @param [type] $value [description] * @return [type] [description] */ public function css($property=null,$value=null) { //返回匹配元素样式属性 if($property===null && $value===null){ return $this->css_array(); } //css('{"witdh": "100px","height": "100px"}') json格式 if(!is_array($property) && $value===null){ $_property = json_decode($property,true); is_array($_property) && $property = $_property; unset($_property); } //非法json返 false //css('type','text') if(!is_array($property) && is_string($property) && $value!==null){ $property = array($property=>$value); } //css('witdh') if(is_string($attribute) && $value===null){ return $this->css_array($attribute); } $pieces = array(); foreach ((array)$property as $key => $value) { $pieces[]=$key.':'.trim($value,';').';'; } if($pieces){ $style = implode('', $pieces); $this->attr('style',$style); } return $this; } public function removeClass($key=null) { $class = ''; if($key){ $_class = $this->attr('class'); $pieces = array_flip(explode(' ', $_class)); unset($pieces[$key]); $class = implode(' ', array_flip($pieces)); } $this->attr('class',$class); return $this; } /** * 返回匹配元素的属性和值。 * @param [type] $attr [description] * @return [type] [description] */ public function attr_array($attr=null) { preg_match_all('@([\w-_]+)=["|\']*(.+?[^"|\'|>|/]*)["|\']*@is', $this->context, $matches); if($matches[1]){ $array = array(); foreach ($matches[1] as $key => $value) { $array[$value] = $matches[2][$key]; } if($attr===null){ return $array; } return $array[$attr]; } } /** * 设置或返回匹配元素的属性和值。 * @param [type] $attribute 属性的名称。 * 一个或多个属性/值对。 * @param [type] $value 规定属性的值。 */ public function attr($attribute=null,$value=null) { if($value==='reset'){ $this->tag($this->selector); } //返回匹配元素的属性和值 if($attribute===null && $value===null){ return $this->attr_array(); } //attr('{"id": "id","name": "name","class": "class"}') json格式 if(!is_array($attribute) && $value===null){ $_attribute = json_decode($attribute,true); is_array($_attribute) && $attribute = $_attribute; unset($_attribute); } //非法json返 false //attr('type','text') if(!is_array($attribute) && is_string($attribute) && $value!==null){ $attribute = array($attribute=>$value); } //attr('type') if(is_string($attribute) && $value===null){ return $this->attr_array($attribute); } if(strpos($this->context,'{attr}')===false){ foreach ((array)$attribute as $key => $val) { $replace = $key.'="'.$val.'"'; $search = '@'.$key.'="'.$this->preg_value.'"@is'; preg_match($search, $this->context,$match); if($match){ $this->context = preg_replace($search,$replace, $this->context); }else{ $this->context = str_replace('<'.$this->selector,'<'.$this->selector.' '.$replace, $this->context); } } }else{ foreach ((array)$attribute as $key => $val) { $val===null OR $pieces[$key] = $key.'="'.$val.'"'; } if(isset($attribute['value'])){ //移除非input标签的 value if($this->selector!='input'){ unset($pieces['value']); } }else{ //增加input标签的空value if($this->selector=='input'){ $pieces['value'] = 'value=""'; } } $attr = implode(' ', $pieces); $this->context = str_replace('{attr}', $attr, $this->context); //给textarea 赋值 if($this->selector=='textarea' && isset($attribute['value'])){ $this->val($attribute['value']); } } return $this; } public function removeAttr($key=null) { $attr = ''; if($key){ $array = $this->attr(); unset($array[$key]); $this->attr($array,'reset'); } return $this; } public function val($value=null) { if($this->selector=='input'){ if($value===null){ return $this->attr('value'); }else{ $this->attr('value',$value); } }elseif ($this->selector=='textarea') { if($value===null){ return $this->html(); }else{ $this->html($value); } } return $this; } public function text($text=null) { if($text===null){ $text = $this->html(); return $this->html2text($text); }else{ $text = $this->html2text($text); $this->html($text); } return $this; } public function html($html=null,$append=false) { $this->context = str_replace('{html}', '', $this->context); if($html===null){ preg_match('@<'.$this->selector.'(.*?[^<]*)>(.*?[^<]*)</'.$this->selector.'>@is', $this->context,$match); if($match[2]){ return $match[2]; } }else{ $reference = null; $append && $reference = '$2';//反向引用 $this->context = preg_replace('@<'.$this->selector.'(.*?[^<]?)>(.*?[^<]?)</'.$this->selector.'>@is', '<'.$this->selector.'$1>'.$reference.$html.'</'.$this->selector.'>', $this->context); } return $this; } public function addClass($class) { $class = $this->attr('class').' '.$class; $class = explode(' ', $class); $pieces = array_unique($class); $pieces = array_map("trim" , $pieces); $this->attr('class',implode(' ', $pieces)); return $this; } public function append($html) { $this->html($html,true); return $this; } public function html2text($value) { $value = is_array($value) ? array_map(array($this,'html2text'), $value) : preg_replace(array('/<[\/\!]*?[^<>]*?>/is','/\s*/is'),'',$value); return $value; } public function render() { $this->context = str_replace(array('{attr}','{html}'), '', $this->context); return $this->context; } public function __toString() { return $this->render(); } public function __destruct() { return $this->render(); } }